home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
pluginy Firefox
/
1843
/
1843.xpi
/
content
/
firebug
/
editors.js
< prev
next >
Wrap
Text File
|
2010-01-15
|
7KB
|
212 lines
/* See license.txt for terms of usage */
// ************************************************************************************************
// Constants
const prefs = fbXPCOMUtils.CCSV("@mozilla.org/preferences-service;1", "nsIPrefBranch");
const names = ["label", "executable", "cmdline", "image"];
// ************************************************************************************************
// Globals
var gEditorManager =
{
_tree : null,
_data : [],
_removeButton : null,
_changeButton : null,
init: function()
{
var args = window.arguments[0];
this._FBL = args.FBL;
this._prefName = args.prefName;
(this._removeButton = document.getElementById("removeEditor")).disabled = true;
(this._changeButton = document.getElementById("changeEditor")).disabled = true;
this._tree = document.getElementById("editorsList");
this._treeView =
{
data: this._data,
selection: null,
get rowCount() { return this.data.length; },
getCellText: function(row, column)
{
switch(column.id)
{
case "editorName":
return " "+this.data[row].label;
case "editorExecutable":
return this.data[row].executable;
case "editorParams":
return this.data[row].cmdline;
}
return "";
},
setTree: function(treebox){ this.treebox = treebox; },
isContainer: function(row) { return false; },
isContainerOpen: function(row) { return false; },
isContainerEmpty: function(row) { return false; },
isSeparator: function(row) { return false; },
isSorted: function() { return false; },
getLevel: function(row) { return 0; },
getImageSrc: function(row,column) { return column.id=="editorName" ? this.data[row].image : null; },
getRowProperties: function(row,props) {},
getCellProperties: function(row,column,props) {},
getColumnProperties: function(colid,column,props) {}
};
this._load();
this._tree.view = this._treeView;
},
uninit: function()
{
},
onSelectionChanged: function()
{
var selection = this._tree.view.selection;
this._removeButton.disabled = (selection.count != 1);
this._changeButton.disabled = (selection.count != 1);
},
addEditorHandler: function()
{
var item = { label: "", executable: null, cmdline: "" };
var result = {};
var args = {
item: item,
FBL: this._FBL
};
openDialog("chrome://firebug/content/changeeditor.xul", "_blank", "modal,centerscreen", args, result);
if (result.saveChanges)
{
item.id = item.label.replace(/\W/g, "_");
this._saveItem(item);
this._loadItem(item);
this._data.push(item);
this._tree.view = this._treeView;
var editors = [];
try {
editors = prefs.getCharPref(this._prefName).split(",");
for( var i = 0; i < editors.length; ++i )
{
if ( editors[i].replace(/^\s+|\s+$/,"") == "" )
editors.splice(i, 1);
}
}
catch(exc)
{
this._FBL.ERROR(exc);
}
editors.push(item.id);
prefs.setCharPref(this._prefName, editors.join(","));
}
},
removeEditorHandler: function()
{
var selection = this._tree.view.selection;
if (selection.count < 1)
return;
var item = this._data[selection.currentIndex];
this._data.splice(selection.currentIndex, 1);
this._tree.view = this._treeView;
try {
var editors = prefs.getCharPref(this._prefName).split(",");
this._FBL.remove(editors, item.id);
prefs.setCharPref(this._prefName, editors.join(","));
prefs.deleteBranch(this._prefName+"."+item.id);
}
catch(exc)
{
this._FBL.ERROR(exc);
}
},
changeEditorHandler: function()
{
var selection = this._tree.view.selection;
if (selection.count != 1)
return;
var item = this._data[selection.currentIndex];
var args = {
item: item,
FBL: this._FBL
};
var result = {};
openDialog("chrome://firebug/content/changeeditor.xul", "_blank", "modal,centerscreen", args, result);
if (result.saveChanges)
{
this._saveItem(item);
}
this._loadItem(item);
this._tree.view = this._treeView;
},
_loadItem: function(item)
{
const prefName = this._prefName;
for( var i = 0; i < names.length; ++i )
{
try {
item[names[i]] = prefs.getCharPref(prefName+"."+item.id+"."+names[i]);
}
catch(exc)
{}
}
if (!item.image)
item.image = this._FBL.getIconURLForFile(item.executable);
},
_saveItem: function(item)
{
if ( item.image && item.image == this._FBL.getIconURLForFile(item.executable) )
item.image = null;
const prefName = this._prefName;
for( var i = 0; i < names.length; ++i )
{
try {
var value = item[names[i]];
if ( value )
prefs.setCharPref(prefName+"."+item.id+"."+names[i], value);
else
prefs.clearUserPref(prefName+"."+item.id+"."+names[i]);
}
catch(exc)
{}
}
},
_load: function()
{
try {
var list = prefs.getCharPref(this._prefName).split(",");
for (var i = 0; i < list.length; ++i)
{
var editorId = list[i].replace(/\s/g, "_");
if ( !editorId )
continue;
var item = { id: editorId };
this._data.push(item);
this._loadItem(item);
}
}
catch(exc)
{
this._FBL.ERROR(exc);
}
}
};
// ************************************************************************************************